#include <string>
#include <memory>

using namespace std;

size_t get_size();

int main()
{
    // 调用 get_size 确定分配多少个 int
    int *pia = new int[get_size()]; // pia 指向第一个 int

    typedef int arrT[42];   // arrT 表示 42 个 int 的数组类型
    int *p = new arrT;      // 分配一个 42 个 int 的数组；p 指向第一个 int
    // int *p = new int[42];   // 编译器执行

    int *pia1 = new int[10];         // 10 个未初始化的 int
    int *pia2 = new int[10]();       // 10 个值初始化为 0 的 int
    string *psa1 = new string[10];   // 10 个空 string
    string *psa2 = new string[10](); // 10 个空 string

    // 10 个 int 分别用列表中对应的初始化器初始化
    int *pia3 = new int[10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    // 10 个 string，前 4 个用给定的初始化器初始化，剩余的进行值初始化
    string *psa3 = new string[10]{"a", "an", "the", string(3, 'x')};
}

size_t get_size()
{
    /* ... */
    return 1;
}